home *** CD-ROM | disk | FTP | other *** search
/ Aminet 3 / Aminet 3 - July 1994.iso / Aminet / demo / euro / ShowAmiga.lha / ShowF+A2 < prev    next >
Text File  |  1994-03-03  |  13KB  |  552 lines

  1. '" ShowF+A, P. Kittel, CBM Ffm 10.2.94, 3.3.94
  2. '" - Aufbauend auf LoadACBM
  3. '" - Benötigt zu exec, graphics, dos,
  4. '" - intuition und diskfont die .bmap-Dateien
  5.  
  6. CLEAR ,120000&
  7.  
  8. sc&=PEEKL(WINDOW(7) + 46) '" Screen-Struktur
  9. Hoehe=PEEKW(sc&+14):PRINT '" Screen-Höhe
  10. ymax%=255:IF Hoehe<ymax% THEN ymax%=199
  11. yma5%=ymax%-5
  12.  
  13. ON BREAK GOSUB NoBreak
  14. BREAK ON
  15.  
  16. ON ERROR GOTO Ende
  17.  
  18. MENU 1,0,0," "
  19. MENU 2,0,0," "
  20. MENU 3,0,0," "
  21. MENU 4,0,0," "
  22. 'ON MENU GOTO 0
  23. 'MENU OFF
  24.  
  25. WINDOW 1," ",,0
  26.  
  27. DIM bPlane&(5), cTabWork%(32), cTabSave%(32)
  28. '
  29. REM - Functionen aus dos.library                   
  30. DECLARE FUNCTION xOpen&  LIBRARY
  31. DECLARE FUNCTION xRead&  LIBRARY
  32. DECLARE FUNCTION xWrite& LIBRARY
  33. DECLARE FUNCTION Lock&   LIBRARY
  34. REM - xClose returns no value
  35. '
  36. REM - Functionen aus exec.library
  37. DECLARE FUNCTION AllocMem&() LIBRARY
  38. DECLARE FUNCTION OpenLibrary&() LIBRARY
  39. REM - FreeMem returns no value
  40. '
  41. DECLARE FUNCTION OpenDiskFont& LIBRARY
  42. DECLARE FUNCTION AskSoftStyle& LIBRARY
  43. DECLARE FUNCTION TextLength&   LIBRARY
  44. '
  45. '"Suchen nach .bmap-Dateien ...
  46. LIBRARY "diskfont.library"
  47. LIBRARY "dos.library"
  48. LIBRARY "exec.library"
  49. LIBRARY "graphics.library"
  50. LIBRARY "intuition.library"
  51.  
  52. REM - Pufferspeicherplatz reservieren
  53. ClearPublic& = 65537&
  54. mybufsize& = 360
  55. mybuf& = AllocMem&(mybufsize&,ClearPublic&)
  56. IF mybuf& = 0 THEN
  57.   loadError$ = "Pufferspeicherplatz nicht verfügbar."
  58.   GOTO Mcleanup2
  59.   END IF
  60.  
  61. bildnr%=2
  62. ACBMname$ = "clogo.ACBM"
  63. loadError$ = ""
  64. GOSUB LoadACBM
  65. IF loadError$<>"" THEN Mcleanup2
  66.  
  67. IF Hoehe<=200 THEN SCROLL (50,20)-(600,210),0,-28
  68.  
  69. rp&=sRastPort&
  70. ma&=rp&+24:POKE ma&,1 ' Nur Farbe 1
  71.  
  72. OPEN "ram:locaf+a" FOR INPUT AS 1
  73. LINE INPUT#1,unter$
  74. LINE INPUT#1,haupt$
  75. gu$=INPUT$(1,1)
  76. CLOSE 1
  77.  
  78. OPEN "ram:allgf+a" FOR INPUT AS 1
  79. n=0:zmax=0:z=0
  80. WHILE NOT EOF(1)
  81.   LINE INPUT#1,a$
  82.   IF LEFT$(a$,1)="\" THEN
  83.     n=n+1
  84.     IF z>zmax THEN zmax=z
  85.     z=0
  86.                      ELSE
  87.     z=z+1
  88.     END IF
  89.   WEND
  90. CLOSE 1
  91. n=n-1
  92.  
  93. ' PRINT :PRINT n;"Einzelartikel, max.";zmax;"Zeilen"
  94. DIM tit$(n),tex$(n,zmax),zei%(n),allg%(n),nun%(n),xuu%(6)
  95. OPEN "ram:allgf+a" FOR INPUT AS 1
  96. ni=0:z=-1:nu=-1
  97. WHILE NOT EOF(1)
  98.   LINE INPUT#1,a$
  99.   IF LEFT$(a$,1)="\" THEN
  100.     zei%(ni)=z:allg%(ni)=RIGHT$(a$,1)="+"
  101.     IF MID$(a$,2,1)="#" THEN nu=nu+1:nun%(nu)=ni
  102.     ni=ni+1
  103.     z=-1
  104.                      ELSE
  105.     z=z+1:tex$(ni,z)=a$
  106.     END IF
  107.   WEND
  108. CLOSE 1
  109.  
  110. GOSUB Unterzeile
  111. un=1
  112. FOR i=0 TO 2
  113.   un=INSTR(un,unter$,"[")
  114.   xuu%(i+i)=(un-1)*8+xu%:un=un+1
  115.   un=INSTR(un,unter$,"]")
  116.   xuu%(i+i+1)=(un-1)*8+xu%:un=un+1
  117.   NEXT
  118.  
  119. ni=0:g$=""
  120. WHILE 1
  121.   ' CLS:LOCATE 2,1
  122.   
  123.   SetAPen rp&,0
  124.   IF Hoehe>200 THEN
  125.     RectFill rp&,0,0,640,238
  126.                ELSE
  127.     RectFill rp&,0,0,640,182
  128.     END IF
  129.   
  130.   IF pFont&<>0 THEN CALL CloseFont(pFont&)
  131.   enable%=AskSoftStyle&(rp&) ' WINDOW(8))
  132.   fontName$="topaz.font" 
  133.   height%=9:style%=0:prefs%=0
  134.   fontName0$=fontName$+CHR$(0)
  135.   textAttr&(0)=SADD(fontName0$)
  136.   textAttr&(1)=height%*65536& + style%*256 + prefs%
  137.   pFont&=OpenDiskFont&(VARPTR(textAttr&(0)))
  138.   IF pFont& <> 0 THEN
  139.     SetFont rp&,pFont&
  140.     mask%=2
  141.     SetSoftStyle rp&,mask%,enable%
  142.     END IF
  143.  
  144.   stadt$=tex$(ni,0)
  145.   ls%=LEN(stadt$)
  146.   sl%=TextLength&(rp&,SADD(stadt$),ls%)
  147.   x%=8
  148.   y%=18
  149.   Move rp&,x%,y%:SetDrMd rp&,8
  150.   SetAPen rp&,1:Text rp&,SADD(stadt$),ls%
  151.  
  152.   IF pFont&<>0 THEN CALL CloseFont(pFont&)
  153.   enable%=AskSoftStyle&(rp&)
  154.   fontName$="topaz.font" 
  155.   height%=8:style%=0:prefs%=0
  156.   fontName0$=fontName$+CHR$(0)
  157.   textAttr&(0)=SADD(fontName0$)
  158.   textAttr&(1)=height%*65536& + style%*256 + prefs%
  159.   pFont&=OpenDiskFont&(VARPTR(textAttr&(0)))
  160.   IF pFont& <> 0 THEN
  161.     SetFont rp&,pFont&
  162.     'mask%=2
  163.     'SetSoftStyle rp&,mask%,enable%
  164.     END IF
  165.  
  166.   ze=zei%(ni):x%=8
  167.   FOR i=1 TO ze
  168.     ' PRINT " ";tex$(ni,i)
  169.     y%=y%+9
  170.     stadt$=tex$(ni,i)
  171.     ls%=LEN(stadt$)
  172.     Move rp&,x%,y%
  173.     Text rp&,SADD(stadt$),ls%
  174.     NEXT
  175.   
  176.   g$="":mo=0:wz=0:t0=TIMER+10+ze*5/2
  177.   SetAPen rp&,0
  178.   WHILE g$="" AND mo<=0
  179.     wz=wz+1:IF wz>7 THEN wz=1
  180.     IF wz=1 THEN RectFill rp&,0,0,640,8
  181.     IF wz=2 THEN RectFill rp&,0,0,5,ymax%
  182.     IF wz=3 THEN RectFill rp&,636,0,640,ymax%
  183.     IF wz=4 THEN RectFill rp&,0,yma5%,640,ymax%
  184.     IF wz=5 THEN RectFill rp&,635,0,640,10
  185.     IF wz=6 THEN ActivateWindow WINDOW(7)
  186.     IF wz=7 THEN ScreenToFront sScreen&
  187.     g$=INKEY$:mo=MOUSE(0)
  188.     IF TIMER>t0 THEN g$="auto"
  189.     IF TIMER<t0-1000 THEN t0=TIMER+10
  190.     WEND
  191.   IF mo THEN
  192.     xx%=MOUSE(1):yy%=MOUSE(2)
  193.     IF yy%>yu%-8 AND g$<>gu$ THEN
  194.       IF xx%>=xuu%(0) AND xx%<=xuu%(1) THEN g$=" "
  195.       IF xx%>=xuu%(2) AND xx%<=xuu%(3) THEN g$="-"
  196.       IF xx%>=xuu%(4) AND xx%<=xuu%(5) THEN g$=gu$
  197.       END IF
  198.     END IF
  199.   IF g$=CHR$(28) THEN g$="-"
  200.   IF g$=gu$ THEN GOSUB Uebersicht:g$=" "
  201.   IF g$="-" THEN
  202.     ni=ni-1:IF ni<0 THEN ni=n
  203.                 ELSE
  204.     ni=ni+1:IF ni>n THEN ni=0
  205.     IF g$="auto" THEN
  206.       WHILE allg%(ni)=0
  207.         ni=ni+1:IF ni>n THEN ni=0
  208.         WEND
  209.       END IF
  210.     END IF
  211.   WEND
  212. '
  213. Mcleanup:
  214. '
  215. Mcleanup2:
  216. IF loadError$ <> "" THEN PRINT loadError$:inf=0
  217. '
  218. Ende:
  219. IF pFont& THEN CloseFont pFont&:pFont&=0
  220. WINDOW CLOSE 2
  221. SCREEN CLOSE 2
  222. IF mybuf& <> 0 THEN CALL FreeMem&(mybuf&,mybufsize&)
  223. LIBRARY CLOSE
  224. END
  225.  
  226. LoadACBM:
  227. '" - Folgende Variablen müssen 
  228. '" - initialisiert sein:
  229. REM -    ACBMname$ (ACBM-Dateiname)
  230.  
  231. REM - Variablen initialisieren
  232. f$ = ACBMname$
  233. fHandle& = 0
  234. foundBMHD = 0
  235. foundCMAP = 0
  236. foundCAMG = 0
  237. foundCCRT = 0
  238. foundABIT = 0
  239.  
  240. REM - aus include/libraries/dos.h
  241. REM - MODE_NEWFILE = 1006 
  242. REM - MODE_OLDFILE = 1005
  243.  
  244. filename$ = f$ + CHR$(0)
  245. fHandle& = xOpen&(SADD(filename$),1005&)
  246. IF fHandle& = 0 THEN
  247.    loadError$ = "Eingabedatei nicht gefunden/lesbar."
  248.    GOTO Lcleanup
  249. END IF
  250.  
  251. inbuf& = mybuf&
  252. cbuf& = mybuf& + 120
  253. ctab& = mybuf& + 240
  254.  
  255.  
  256. REM - Eingabe sollte lauten  FORMnnnnACBM
  257. rLen& = xRead&(fHandle&,inbuf&,12&)
  258. tt$ = ""
  259. FOR kk& = 8 TO 11
  260.    tt% = PEEK(inbuf& + kk&)
  261.    tt$ = tt$ + CHR$(tt%)
  262. NEXT
  263.  
  264. IF tt$ <> "ACBM" THEN 
  265.    loadError$ = "Keine ACBM-Grafikdatei."
  266.    GOTO Lcleanup
  267. END IF
  268.  
  269. REM - ACBM-Datei Chunk-weise lesen
  270.  
  271. ChunkLoop:
  272. REM - Chunk-Name/Länge ermitteln
  273.  rLen& = xRead&(fHandle&,inbuf&,8&)
  274.  icLen& = PEEKL(inbuf& + 4)
  275.  tt$ = ""
  276.  FOR kk& = 0 TO 3
  277.     tt% = PEEK(inbuf& + kk&)
  278.     tt$ = tt$ + CHR$(tt%)
  279.  NEXT   
  280.     
  281. IF tt$ = "BMHD" THEN  'BitMap-Header 
  282.    foundBMHD = 1
  283.    rLen& = xRead&(fHandle&,inbuf&,icLen&)
  284.    iWidth%  = PEEKW(inbuf&)
  285.    iHeight% = PEEKW(inbuf& + 2)
  286.    iDepth%  = PEEK(inbuf& + 8)  
  287.    iCompr%  = PEEK(inbuf& + 10)
  288.    scrWidth%  = PEEKW(inbuf& + 16)
  289.    scrHeight% = PEEKW(inbuf& + 18)
  290.  
  291.    iRowBytes% = iWidth% /8
  292.    scrRowBytes% = scrWidth% / 8
  293.    nColors%  = 2^(iDepth%)
  294.  
  295.    '" - Genug Platz für Videospeicher ?
  296.    AvailRam& = FRE(-1)
  297.    NeededRam& = ((scrWidth%/8)*scrHeight%*(iDepth%+1))+5000
  298.    IF AvailRam& < NeededRam& THEN
  299.       loadError$ = "Speicherplatz reicht nicht aus."
  300.       GOTO Lcleanup
  301.    END IF
  302.  
  303.    kk& = 1
  304.    '" alte NTSC-Version:
  305.    '" IF scrWidth% > 320 THEN kk& = kk& + 1
  306.    '" IF scrHeight% > 200  THEN kk& = kk& + 2
  307.    '" neu PAL:
  308.    hires&=&H8000
  309.    lace&=&H4
  310.    IF foundCAMG THEN
  311.      IF (camgModes& AND hires&) THEN kk&=kk&+1
  312.      IF (camgModes& AND lace& ) THEN kk&=kk&+2
  313.                 ELSE
  314.      IF scrWidth%  > 320 THEN kk&=kk&+1
  315.      IF scrHeight% > 256 THEN kk&=kk&+2
  316.      END IF
  317.    SCREEN bildnr%,scrWidth%,scrHeight%,iDepth%,kk&
  318.    WINDOW bildnr%,,,0,bildnr%
  319.  
  320.    REM - Adressen von Screen-Structures ermitteln
  321.    GOSUB GetScrAddrs
  322.  
  323.    REM  Farbpalette
  324.    IF foundCMAP THEN 
  325.      CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
  326.      END IF
  327.  
  328.    REM - Schirm während Ladevorgang im Hintergrund
  329.    ' ScreenToBack sScreen&
  330.  
  331. ELSEIF tt$ = "CMAP" THEN  'Farbpalette
  332.    foundCMAP = 1
  333.    rLen& = xRead&(fHandle&,cbuf&,icLen&)
  334.  
  335.    REM - Farbpalette aufbauen
  336.    FOR kk& = 0 TO nColors% - 1
  337.       red% = PEEK(cbuf&+(kk&*3))
  338.       gre% = PEEK(cbuf&+(kk&*3)+1)
  339.       blu% = PEEK(cbuf&+(kk&*3)+2)
  340.       regTemp% = (red%*16)+(gre%)+(blu%/16)
  341.       POKEW (ctab&+(2*kk&)),regTemp%
  342.    NEXT
  343.    
  344.  
  345. ELSEIF tt$ = "CAMG" THEN 'Amiga ViewPort Modes
  346.    foundCAMG = 1
  347.    rLen& = xRead&(fHandle&,inbuf&,icLen&)
  348.    camgModes& = PEEKL(inbuf&)
  349.  
  350.  
  351. ELSEIF tt$ = "CCRT" THEN 'Graphicraft-Farbzyklus-Daten
  352.    foundCCRT = 1
  353.    rLen& = xRead&(fHandle&,inbuf&,icLen&)
  354.    ccrtDir%    = PEEKW(inbuf&)
  355.    ccrtStart%  = PEEK(inbuf& + 2)
  356.    ccrtEnd%    = PEEK(inbuf& + 3)
  357.    ccrtSecs&   = PEEKL(inbuf& + 4)
  358.    ccrtMics&   = PEEKL(inbuf& + 8)
  359.  
  360.  
  361. ELSEIF tt$ = "ABIT" THEN  'Contiguous BitMap 
  362.    foundABIT = 1
  363.  
  364.    '" - Hier werden nur volle BitMaps verarbeitet, keine 
  365.    '" - Ausschnitte wie z.B. Pinsel (Brushes).
  366.    '" - Sehr schnell, liest ganze BitPlanes.
  367.    plSize& = (scrWidth%/8) * scrHeight%
  368.    FOR pp = 0 TO iDepth% -1
  369.       rLen& = xRead&(fHandle&,bPlane&(pp),plSize&)
  370.    NEXT
  371.  
  372.  
  373. ELSE 
  374.    REM - unbekannten Chunk-Typ lesen  
  375.    FOR kk& = 1 TO icLen&
  376.       rLen& = xRead&(fHandle&,inbuf&,1&)
  377.    NEXT
  378.    '" - Wenn Länge ungerade, noch 1 Byte lesen
  379.    IF (icLen& OR 1) = icLen& THEN 
  380.       rLen& = xRead&(fHandle&,inbuf&,1&)
  381.    END IF
  382.       
  383. END IF
  384.  
  385.  
  386. REM - Fertig, wenn alle Chunks gelesen
  387. IF foundBMHD AND foundCMAP AND foundABIT THEN
  388.    GOTO GoodLoad
  389. END IF
  390.  
  391. REM - Lesen ok, nächsten Chunk lesen
  392. IF rLen& > 0 THEN GOTO ChunkLoop
  393.  
  394. IF rLen& < 0 THEN  ' Lesefehler
  395.    loadError$ = "Lesefehler."
  396.    GOTO Lcleanup
  397. END IF   
  398.  
  399. REM - rLen& = 0  heißt EOF (Dateiende)
  400. IF (foundBMHD=0) OR (foundABIT=0) OR (foundCMAP=0) THEN
  401.    loadError$ = "Wichtige IFF-Chunks nicht gefunden."
  402.    GOTO Lcleanup
  403. END IF
  404.  
  405.  
  406. GoodLoad:
  407. loadError$ =""
  408.  
  409. REM  Farbpalette
  410. IF foundCMAP THEN 
  411.    CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
  412. END IF
  413.  
  414. Lcleanup:
  415. IF fHandle& <> 0 THEN CALL xClose&(fHandle&)
  416. RETURN
  417.  
  418.  
  419. GetScrAddrs:
  420. REM - Adressen von Screen-Structures ermitteln
  421.    sWindow&   = WINDOW(7)
  422.    sScreen&   = PEEKL(sWindow& + 46)
  423.    sViewPort& = sScreen& + 44
  424.    sRastPort& = sScreen& + 84
  425.    sColorMap& = PEEKL(sViewPort& + 4)
  426.    colorTab&  = PEEKL(sColorMap& + 4)
  427.    sBitMap&   = PEEKL(sRastPort& + 4)
  428.  
  429.    REM - Screen-Parameter ermitteln
  430.    scrWidth%  = PEEKW(sScreen& + 12)
  431.    scrHeight% = PEEKW(sScreen& + 14)
  432.    scrDepth%  = PEEK(sBitMap& + 5)
  433.    nColors%   = 2^scrDepth%
  434.  
  435.    REM - Adressen der BitPlanes ermitteln
  436.    FOR kk& = 0 TO scrDepth% - 1
  437.       bPlane&(kk&) = PEEKL(sBitMap&+8+(kk&*4))
  438.    NEXT
  439. RETURN
  440.  
  441. NoBreak:
  442. RETURN
  443.  
  444. Uebersicht:
  445. SetAPen rp&,0
  446. RectFill rp&,0,0,640,ymax%
  447.  
  448. IF pFont&<>0 THEN CALL CloseFont(pFont&)
  449. enable%=AskSoftStyle&(rp&) ' WINDOW(8))
  450. fontName$="topaz.font" 
  451. height%=9:style%=0:prefs%=0
  452. fontName0$=fontName$+CHR$(0)
  453. textAttr&(0)=SADD(fontName0$)
  454. textAttr&(1)=height%*65536& + style%*256 + prefs%
  455. pFont&=OpenDiskFont&(VARPTR(textAttr&(0)))
  456. IF pFont& <> 0 THEN
  457.   SetFont rp&,pFont&
  458.   mask%=2
  459.   SetSoftStyle rp&,mask%,enable%
  460.   END IF
  461. '
  462. SetAPen rp&,1
  463. x%=8:y%=18
  464. ' haupt$="Übersicht - Hauptkapitel"
  465. ls%=LEN(haupt$)
  466. Move rp&,x%,y%
  467. Text rp&,SADD(haupt$),ls%
  468. x%=26:y%=29:nr%=-1
  469. FOR i=0 TO nu
  470.   y%=y%+10
  471.   stadt$=tex$(nun%(i),0)
  472.   ls%=LEN(stadt$)
  473.   Move rp&,x%,y%+1
  474.   Text rp&,SADD(stadt$),ls%
  475.   Move rp&, 6,y%+2
  476.   Draw rp&,21,y%+2:Draw rp&,21,y%-6
  477.   Draw rp&, 6,y%-6:Draw rp&, 6,y%+2
  478.   IF nr%<0 AND nun%(i)>=ni THEN
  479.     RectFill rp&,6,y%-6,21,y%+2
  480.     nr%=i
  481.     END IF
  482.   NEXT
  483. IF nr%<0 THEN
  484.   RectFill rp&,6,39-6,21,39+2
  485.   nr%=0
  486.   END IF
  487. t0=TIMER+20:nux=-1:wz=0
  488. SetAPen rp&,0
  489. WHILE nux<0 AND TIMER<t0
  490.   wz=wz+1:IF wz>7 THEN wz=1
  491.   IF wz=1 THEN RectFill rp&,0,0,640,8
  492.   IF wz=2 THEN RectFill rp&,0,0,5,ymax%
  493.   IF wz=3 THEN RectFill rp&,636,0,640,ymax%
  494.   IF wz=4 THEN RectFill rp&,0,yma5%,640,ymax%
  495.   IF wz=5 THEN RectFill rp&,635,0,640,10
  496.   IF wz=6 THEN ActivateWindow WINDOW(7)
  497.   IF wz=7 THEN ScreenToFront sScreen&
  498.   u$=INKEY$
  499.   IF u$=CHR$(13) THEN nux=nr%
  500.   IF u$=CHR$(28) OR u$=CHR$(29) THEN
  501.     RectFill rp&,7,39+10*nr%-5,20,39+10*nr%+1
  502.     IF u$=CHR$(28) THEN
  503.       nr%=nr%-1:IF nr%<0 THEN nr%=nu
  504.                    ELSE
  505.       nr%=nr%+1:IF nr%>nu THEN nr%=0
  506.       END IF
  507.     SetAPen rp&,1
  508.     RectFill rp&,6,39+10*nr%-6,21,39+10*nr%+2
  509.     SetAPen rp&,0
  510.     END IF
  511.   IF MOUSE(0) THEN
  512.     x%=MOUSE(1):y%=MOUSE(2)
  513.     IF x%<22 THEN
  514.       y%=y%-30
  515.       yh%=INT(y%/10)
  516.       ym%=y% MOD 10
  517.       IF ym%>1 AND y%>0 AND yh%<=nu THEN nux=yh%
  518.       END IF
  519.     END IF
  520.   WHILE MOUSE(0):WEND
  521.   WEND
  522. IF nux>=0 THEN ni=nun%(nux)-1
  523. RectFill rp&,0,0,640,ymax%
  524.  
  525. IF pFont&<>0 THEN CALL CloseFont(pFont&)
  526. enable%=AskSoftStyle&(rp&)
  527. fontName$="topaz.font" 
  528. height%=8:style%=0:prefs%=0
  529. fontName0$=fontName$+CHR$(0)
  530. textAttr&(0)=SADD(fontName0$)
  531. textAttr&(1)=height%*65536& + style%*256 + prefs%
  532. pFont&=OpenDiskFont&(VARPTR(textAttr&(0)))
  533. IF pFont& <> 0 THEN
  534.   SetFont rp&,pFont&
  535.   'mask%=2
  536.   'SetSoftStyle rp&,mask%,enable%
  537.   END IF
  538. ' GOSUB Unterzeile
  539. ' RETURN
  540.  
  541. Unterzeile:
  542. SetAPen rp&,1
  543. xu%=8:yu%=ymax%-8
  544. ' unter$="[Weiter mit Leertaste oder Maus]  [zurück mit Minus -]  [u für Übersicht]"
  545. ls%=LEN(unter$)
  546. Move rp&,xu%,yu%
  547. Text rp&,SADD(unter$),ls%
  548. RETURN
  549.  
  550.  
  551.  
  552.